#include "allhead.h"
#include "Graf.h"

void rotate_coords_of_points(LPGRAF graf, int forw_back) // 1 - forward; -1 - back
{
 int i,j,k;
 double a[3][3],v0[3],v1[3],Vx,Vy,Vz;

 // return swap_coords_of_points(graf);

 if(!graf->Vsr)
		{
		 printf("rotate_coords_of_points: Eror #1 : graf->Vsr=NULL nt=%d forw_back=%d\n",graf->nt,forw_back); 
		 exit(0);
		}

 if(fabs(graf->Vsr[0][2])>.99) return;

 Vx=graf->Vsr[0][0];
 Vy=graf->Vsr[0][1];
 Vz=graf->Vsr[0][2];

	a[2][0]= Vx; a[2][1]= Vy; a[2][2]= Vz;		// new Z ort
	a[1][0]=-Vy; a[1][1]= Vx; a[1][2]= 0.;		// new Y ort

	a[0][0]= a[1][1]*a[2][2]-a[1][2]*a[2][1];
	a[0][1]=-a[1][0]*a[2][2]+a[1][2]*a[2][0];
	a[0][2]= a[1][0]*a[2][1]-a[1][1]*a[2][0];									// new X ort

	normilize_v3(a[0],a[0]);
	normilize_v3(a[1],a[1]);
	normilize_v3(a[2],a[2]);

	for(i=0;i<graf->n;i++)
		{
		v0[0]=graf->vertex[i].x;
		v0[1]=graf->vertex[i].y;
		v0[2]=graf->vertex[i].z;

		for(j=0;j<3;j++)
			{
			v1[j]=0.;

			for(k=0;k<3;k++)
				if(forw_back==1)	v1[j]+=a[j][k]*v0[k];
				else				v1[j]+=a[k][j]*v0[k];
			}

		graf->vertex[i].x=(float)v1[0];
		graf->vertex[i].y=(float)v1[1];
		graf->vertex[i].z=(float)v1[2];
		}
}

void swap_coords_of_points(LPGRAF graf)
{
 int i;
 float a;

 if(!graf->bxyz)
	 return;

 for(i=0;i<graf->n;i++)
	{
	 switch(graf->bxyz)
		{
		case 1: // x<->z

			a				 =graf->vertex[i].x;
			graf->vertex[i].x=graf->vertex[i].z;
			graf->vertex[i].z=a;

		break;

		case 2: // y<->z

			a				 =graf->vertex[i].y;
			graf->vertex[i].y=graf->vertex[i].z;
			graf->vertex[i].z=a;

			break;
		}
	}
}



//================
/*
void rotate_coords_of_points1(LPGRAF graf, int forw_back) // 1 - forward; -1 - back
{
 int i,j,k;
 double a[3][3],v0[3],v1[3];

 // return swap_coords_of_points(graf);

 printf("\n");

	a[2][0]=1.;
	a[2][1]=0.;
	a[2][2]=1.; // new Z ort

	a[1][0]=0.;
	a[1][1]=1;
	a[1][2]=0.; // new Y ort

	a[0][0]= a[1][1]*a[2][2]-a[1][2]*a[2][1];
	a[0][1]=-a[1][0]*a[2][2]+a[1][2]*a[2][0];
	a[0][2]= a[1][0]*a[2][1]-a[1][1]*a[2][0];	// new X ort

	normilize_v3(a[0],a[0]);
	normilize_v3(a[1],a[1]);
	normilize_v3(a[2],a[2]);

	printf("a0: %g %g %g\n",a[0][0],a[0][1],a[0][2]);
	printf("a1: %g %g %g\n",a[1][0],a[1][1],a[1][2]);
	printf("a2: %g %g %g\n",a[2][0],a[2][1],a[2][2]);

		{
		v0[0]=1.;
		v0[1]=2.;
		v0[2]=3.;

		printf("v0: %g %g %g\n",v0[0],v0[1],v0[2]);

		for(j=0;j<3;j++)
			{
			v1[j]=0.;

			for(k=0;k<3;k++)
				v1[j]+=a[k][j]*v0[k];
			}

		}

		printf("v1: %g %g %g\n",v1[0],v1[1],v1[2]);

		{
		v0[0]=v1[0];
		v0[1]=v1[1];
		v0[2]=v1[2];

		for(j=0;j<3;j++)
			{
			v1[j]=0.;

			for(k=0;k<3;k++)
				v1[j]+=a[j][k]*v0[k];
			}

		printf("v1: %g %g %g\n",v1[0],v1[1],v1[2]);
		}

 printf("Debug exit #1 swap_coord_test\n"); exit(0);
}

*/
